#include <iostream>
#include <memory>

class Node
{
public:
    std::shared_ptr<Node> next;
    std::weak_ptr<Node> prev;
    Node() : next(nullptr), prev() {}
};
// 2、与模板一起使用：此时auto是占位符，具体类型由decltype获取
template <typename T, typename U>
auto add(T t, U u) -> decltype(t + u)
{
    return t + u;
}
int main()
{
    // 1、decltype  用于查询表达式的类型
    int x = 0;
    using T = decltype(x);   // decltype(x) 是变量 x 的类型；int
    using K = decltype((x)); // decltype((x)) 是表达式 (x) 的类型:  int&

    int a = add(1, 2);
    return 0;
}